package gui.secondary;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JLabel;
import tool.dialog.JRangedNumberField;
import tool.dialog.JStringField;

import gui.DescribedCustomizedButton;
import gui.SecondaryMenu;
import gui.TextPanel;

/** Si tratta del SecondaryMenu relativo all'opzione "Map" del 
 *  PrimaryMenu.
 * @author Daniele
 * @version 1.1 */
public class MapSecondaryMenu extends SecondaryMenu {
	
	private static final long serialVersionUID = 838965998209786733L;
	
	/** La scritta descrittiva delle funzioni di questo menu. */
	private static final String DESC = "Here you can set your map specifications.\n\n" +
									   "Your map can be basically considered just like a 2D grid. " +
									   "Map height is defined as the total number of rows in this grid. Similarly, map width is defined as the " +
									   "total number of columns in this grid. Grid step specifies the side (in pixels) of a single square cell " +
									   "in the grid. Finally, the welcome message is just a name or sentence displayed on the map when it is loaded."; 
	
	/** Le dimensioni preferite dei Textfield. */
	private static final Dimension TEXTFIELD_PREFERRED_SIZE = new Dimension(100, 30);
	/** La String che contiene la dicitura affiancata al campo widthJTextField. */
	private static final String WIDTH = "Set here your map width: ";
	/** La String che contiene la dicitura affiancata al campo heightJTextField. */
	private static final String HEIGHT = "Set here your map height: ";
	/** La String che contiene la dicitura affiancata al campo stepJTextField. */
	private static final String STEP = "Insert here the grid step: ";
	/** La String che contiene la dicitura affiancata al campo titleJTextField. */
	private static final String TITLE = "Welcome message for this map: ";
	
	/** Il JtextField che permette di specificare la larghezza della mappa. */
	private JRangedNumberField<Integer> widthJTextField;
	/** Il JTextField che permette di specificare l'altezza della mappa. */
	private JRangedNumberField<Integer> heightJTextField;
	/** Il JTextField che permette di specificare il passo della griglia. */
	private JRangedNumberField<Integer> stepJTextField;
	/** Il JTextField che permette di specificare il messaggio d'ingresso. */
	private JStringField titleJTextField;
	
//	public MapSecondaryMenu(MapPropertiesOKController ok,CancelButtonController cancel){
//		this();
//		//aggiunta dei listener
//		this.addListeners(ok, cancel);
//	}
	
	/**cabla il presente componente grafico con i controller adeguati per il suo corretto
	 * pilotaggio.
	 * 
	 * @param ok il controller che gestisce e pilota il pulsante di conferma
	 * @param cancel il controller che gestisce e pilota il pulsante di annulla
	 */
//	public void addListeners(MapPropertiesOKController ok,CancelButtonController cancel){
//		ok.wire(okButton, this);
//		cancel.wire(cancelButton, this);
//	}
	
	
	/**costruisce il menu senza cablare i controller ad esso. Il costruttore
	 * crea solamente il layout e la grafica di questo pannello  */
	public MapSecondaryMenu(){
		
		super();
		
		layout = new GridBagLayout();
		constraints = new GridBagConstraints();
		this.setLayout(layout);
		
		//descriptionLabel = new TextPanel(MapSecondaryMenu.DESC);
		this.initializeJScrollPane();
		this.addComponentToLayout(descriptionLabelScrollPane, 0, 0, 2.5, 10, 10, 2);
		
		JLabel widthLabel = new JLabel(MapSecondaryMenu.WIDTH, JLabel.TRAILING);
		this.addComponentToLayout(widthLabel, 0, 1, 0.5, 10, 10, 1);
		
		widthJTextField = new JRangedNumberField<Integer>(Integer.class,0,Integer.MAX_VALUE,false,false);
		this.widthJTextField.setPreferredSize(TEXTFIELD_PREFERRED_SIZE);
		this.addComponentToLayout(widthJTextField, 1, 1, 0.5, 10, 10, 1);
		
		JLabel heightLabel = new JLabel(MapSecondaryMenu.HEIGHT, JLabel.TRAILING);
		this.addComponentToLayout(heightLabel, 0, 2, 0.5, 10, 10, 1);
		
		heightJTextField = new JRangedNumberField<Integer>(Integer.class,0,Integer.MAX_VALUE,false,false);
		this.widthJTextField.setPreferredSize(TEXTFIELD_PREFERRED_SIZE);
		this.addComponentToLayout(heightJTextField, 1, 2, 0.5, 10, 10, 1);
		
		JLabel stepLabel = new JLabel(MapSecondaryMenu.STEP, JLabel.TRAILING);
		this.addComponentToLayout(stepLabel, 0, 3, 0.5, 10, 10, 1);
		
		stepJTextField = new JRangedNumberField<Integer>(Integer.class,0,Integer.MAX_VALUE,false,false);
		this.stepJTextField.setPreferredSize(TEXTFIELD_PREFERRED_SIZE);
		this.addComponentToLayout(stepJTextField, 1, 3, 0.5, 10, 10, 1);
		
		JLabel titleLabel = new JLabel(MapSecondaryMenu.TITLE, JLabel.CENTER);
		this.addComponentToLayout(titleLabel, 0, 4, 0.5, 10, 0, 2);
		
		titleJTextField = new JStringField();
		this.titleJTextField.setPreferredSize(TEXTFIELD_PREFERRED_SIZE);
		this.addComponentToLayout(titleJTextField, 0, 5, 0.5, 0, 10, 2);
		
		this.okButton = new DescribedCustomizedButton(SecondaryMenu.TXT_OK,20,Color.WHITE,Color.BLUE,Color.WHITE,Color.BLUE,new Color(50,0,200),Color.GREEN,3,"Britannic Bold",Color.BLUE,Color.WHITE,Color.GREEN,SecondaryMenu.DESC_OK);
		this.addComponentToLayout(okButton, 0, 6, 0.5, 10, 10, 1);
		this.okButton.addMouseListener(descriptionLabel);
		
		this.cancelButton = new DescribedCustomizedButton(SecondaryMenu.TXT_CANCEL,20,Color.WHITE,Color.BLUE,Color.WHITE,Color.BLUE,new Color(50,0,200),Color.GREEN,3,"Britannic Bold",Color.BLUE,Color.WHITE,Color.GREEN,SecondaryMenu.DESC_CANCEL);
		this.addComponentToLayout(cancelButton, 1, 6, 0.5, 10, 10, 1);
		this.cancelButton.addMouseListener(descriptionLabel);
	}

	/** Getter per il widthJTextField.
	 * @return the widthJTextField */
	public JRangedNumberField<Integer> getWidthJTextField() {
		return widthJTextField;
	}

	/** Getter per il heightJTextField.
	 * @return the heightJTextField */
	public JRangedNumberField<Integer> getHeightJTextField() {
		return heightJTextField;
	}

	/** Getter per il stepJTextField.
	 * @return the stepJTextField */
	public JRangedNumberField<Integer> getStepJTextField() {
		return stepJTextField;
	}

	/** Getter per il titleJTextField.
	 * @return the titleJTextField */
	public JStringField getTitleJTextField() {
		return titleJTextField;
	}
	
	
}
